/**
 * 
 */
package fr.univ_tln.inf9.exaplanning.api.db;

import java.io.IOException;
import java.sql.SQLException;

import fr.univ_tln.inf9.exaplanning.api.db.event.ObjectChangedEvent;
import fr.univ_tln.inf9.exaplanning.api.db.event.ObjectCreatedEvent;

/**
 * Classe abstraite qui doit être étendue par tout objet que l'on souhaite
 * rendre persistant.
 * @author emilien
 *
 */
public abstract class AbstractEntity implements IEntity {

	protected static SessionManager sessionInstance;
	
	/**
	 * @param newObject true si l'objet est nouveau, false si c'est une instanciation depuis la base
	 * @throws IOException
	 * @throws SQLException
	 */
	public AbstractEntity(boolean newObject) throws IOException, SQLException {
		sessionInstance = SessionManager.getInstance();
		if (newObject)
			fireObjectCreated();
	}
	
	/* (non-Javadoc)
	 * @see fr.univ_tln.inf9.exaplanning.api.db.IEntity#fireObjectChanged()
	 */
	@Override
	public void fireObjectChanged() {
		sessionInstance.ObjectChanged(new ObjectChangedEvent(this.getClass(), this));

	}

	/* (non-Javadoc)
	 * @see fr.univ_tln.inf9.exaplanning.api.db.IEntity#fireObjectCreated()
	 */
	@Override
	public void fireObjectCreated() {
		sessionInstance.ObjectCreated(new ObjectCreatedEvent(this.getClass(), this));

	}

}
